package com.dimples.dd.system.mapper;

import com.dimples.dd.mybatis.core.mapper.BaseMapperX;
import com.dimples.dd.mybatis.core.query.MPJLambdaWrapperX;
import com.dimples.dd.system.model.bo.OrgBO;
import com.dimples.dd.system.model.entity.SystemOrgDO;
import com.dimples.dd.system.model.query.OrgPageQuery;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface SystemOrgMapper extends BaseMapperX<SystemOrgDO> {

    /**
     * 根据条件查询机构列表
     *
     * @param queryParams 查询参数
     * @return 机构列表
     */
    default List<OrgBO> selectList(OrgPageQuery queryParams) {
        MPJLambdaWrapperX<SystemOrgDO> wrapperX = new MPJLambdaWrapperX<>();
        wrapperX.selectAll(SystemOrgDO.class);
        wrapperX.eqIfPresent(SystemOrgDO::getOrgName, queryParams.getName()).
                eqIfPresent(SystemOrgDO::getStatus, queryParams.getStatus());
        return this.selectJoinList(OrgBO.class, wrapperX);
    }

    /**
     * 根据父级id和名称查询机构
     *
     * @param parentId 父级id
     * @param name     机构名称
     * @return 机构
     */
    default SystemOrgDO selectByParentIdAndName(String parentId, String name) {
        return selectOne(SystemOrgDO::getParentId, parentId, SystemOrgDO::getOrgName, name);
    }

    /**
     * 根据父级id查询机构数量
     *
     * @param id 父级id
     * @return 机构数量
     */
    default long selectCountByParentId(String id) {
        return selectCount(SystemOrgDO::getParentId, id);
    }
}